---
title: Monitoring
hide_title: true
toc_max_heading_level: 5

---

import TierLabel from "./../_components/TierLabel";

# Monitoring <TierLabel tiers="Enterprise" />

Weave GitOps Enterprise provides the following telemetry and tooling for monitoring:
- [Metrics](#metrics)
- [Profiling](#profiling)

## Setup

The following configuration options are available for you to configure `montoring`:

```yaml
---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: weave-gitops-enterprise
  namespace: flux-system
spec:
  values:
    monitoring:
      enabled: true # enable it if you want to expose a monitoring server
      service:
        name: monitoring
        port: 8080 # port to expose the monitoring server
      metrics:
        enabled: true # enable it to expose a prometheus metrics endpoint in `/metrics`
      profiling:
        enabled: false # enable it to expose a pprof debug endpoint  `/debug/pprof`
```

:::caution
The monitoring server holds private services, so you likely do not require to expose beyond your cluster. In
case you need, ensure that it is properly secured.
:::

## Metrics

It generates [Prometheus](https://prometheus.io/) metrics for monitoring both performance and business operations.

### Get Started

:::info
This setup follows [Flux Monitoring](https://fluxcd.io/flux/monitoring/metrics/) approach based on [Prometheus Operator](https://prometheus-operator.dev/). Adapt it to your context as needed.
:::

1. You have [enabled](#setup) the monitoring server with the metrics endpoint.
2. Install [Kube Prometheus Stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack).

<details>
<summary>Expand to see manifest contents</summary>

```yaml
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: weave-gitops-quickstart
  namespace: flux-system
spec:
  interval: 10m0s
  ref:
    branch: main
  url: https://github.com/weaveworks/weave-gitops-quickstart
---
apiVersion: v1
kind: Namespace
metadata:
  name: monitoring
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: kube-prometheus-stack
  namespace: flux-system
spec:
  interval: 10m0s
  sourceRef:
    kind: GitRepository
    name: weave-gitops-quickstart
  path: ./monitoring/kube-prometheus-stack
  prune: true
  targetNamespace: monitoring
  wait: true
```

</details>

3. Deploy Weave GitOps Monitoring Config

<details>
<summary>Expand to see manifest contents</summary>

```yaml
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: monitoring-config
  namespace: flux-system
spec:
  interval: 10m0s
  sourceRef:
    kind: GitRepository
    name: weave-gitops-quickstart
  path: ./monitoring/weave-gitops
  dependsOn:
    - name: kube-prometheus-stack
  prune: true
  targetNamespace: monitoring
```

</details>

4. See the dashboards in Grafana

You could filter by tags `flux` or `weave-gitops`

![weave gitops dashboard list](imgs/monitoring-dashboard-list.png)

### Dashboards

**Weave Gitops Overview**

Monitor Weave Gitops golden signals for API server and Controllers:

![weave gitops dashboard list](imgs/monitoring-dashboard-overview.png)

**Weave Gitops Runtime**

Monitor Weave Gitops GO runtime metrics like Memory Usage, Memory Heap, Goroutines, etc ...

![weave gitops dashboard list](imgs/monitoring-dashboard-runtime.png)

**Explorer**

Monitor Explorer golden signals. More info [here](../../explorer/operations#monitoring)

## Profiling

Profiling can be useful during operations to help you to gain a deeper understanding, of how weave gitops runtime behaves.
Given Weave GitOps is written in Go, profiling happens through [pprof](https://pkg.go.dev/runtime/pprof), and it is
exposed as web endpoint by [pprof http](https://pkg.go.dev/net/http/pprof).


#### Get Started

1. You have [enabled](#setup) the monitoring server with the profiling endpoint.
2. Navigate to your monitoring server URL to the `/debug/pprof` path where the pprof web interface is exposed.

![profiling web ui](imgs/profiling-pprof-web-ui.png)

For further info on using `pprof` see [here](https://github.com/google/pprof/blob/main/doc/README.md)

